import Vue from 'vue'
import Vuex from 'vuex'
import axios from 'axios'

Vue.use(Vuex)

export default new Vuex.Store({
    state:{
        name:null,
        mobile:null,
        token:null,
    },
    mutations:{
        //登录成功存储token 并设置header头
        logined(state,token){
            state.token = token
            localStorage.token = token
        },
        //用户刷新token成功，使用新token替换本地token
        refreshToken(state,token){
            state.token = token
            localStorage.token = token
            axios.defaults.headers.common['Authorization'] = state.token
        },
        //登录成功后拉取用户的信息存储store
        // profile(state,data){
        //     state.name = data.name
        //     state.mobile = data.mobile
        // },
        setUserName(state,data){
            state.name = data
        },
        //登出，清除本地数据
        logout(state){
            state.name = null
            state.mobile = null
            state.token = null
            localStorage.removeItem('token')
        }
    },
    actions:{
        // //登录成功后保存用户信息
        // logined({dispatch,commit},token){
        //     return new Promise(function(resolve,reject){
        //         commit('logined',token)
        //         axios.defaults.headers.common['Authorization'] = token
        //         dispatch('profile').then(()=>{
        //             resolve()
        //         }).catch(()=>{
        //             reject()
        //         })
        //     })
        // },
        // // 登录成功后使用 token 拉取用户的信息
        // profile({commit}) {
        //     return new Promise(function (resolve, reject) {
        //         axios.get('profile', {}).then(respond => {
        //             if (respond.status == 200) {
        //                 commit('profile', respond.data)
        //                 resolve()
        //             } else {
        //                 reject()
        //             }
        //         })
        //     })
        // },
        // 用户登出，清除本地数据并重定向至登录页面
        logout({commit}) {
            return new Promise(function (resolve, reject) {
                commit('logout')
                axios.post('auth/logout', {}).then(respond => {
                    Vue.$router.push({name:'login'})
                })
            })
        },
        // 将刷新的 token 保存至本地
        refreshToken({commit},token) {
            return new Promise(function (resolve, reject) {
                commit('refreshToken', token)
            })
        },
    }
})